﻿#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

////将数组A中的内容和数组B中的内容进行交换。（数组一样大）
////#include <string.h>
//
//void my_strcpy(char arrA[10], char arrB[10])
//{
//	int i = 0;
//	while( arrB[i] != '\0')
//	{
//		arrA[i] = arrB[i];
//		i++;
//	}
//}
//
//int main()
//{
//	char arrA[10] = { 0 };
//	char arrB[10] = "abcdef";
//	my_strcpy(arrA, arrB);
//	printf("%s\n", arrA);
//	return 0;
//}

//int main()
//{
//	char arr[10] = { '1' };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%c ", arr[i]);
//	}
//	return 0;
//}


////编写程序数一下1~100间有多少9
//int main()
//{
//	int i = 0;
//	int count = 0;
//	for (i = 1; i <= 100; i++)
//	{
//		if (i % 10 == 9)
//			count++;
//		if (i / 10 == 9)  //如果是if...else if则最多只运行一个程序
//			count++;
//	}
//	printf("%d\n", count);
//	return 0;
//}
//
//int a = 0;
//int b = 0;
//void test()
//{
//	a = 2;
//	b = 3;
//}
//
//int main()
//{
//	test();
//	printf("%d %d\n", a, b);
//	return 0;
//}


//void test()
//{
//	{
//		int a = 2;//在复合语句中定义的变量只能在复合语句中使用
//	}
//	printf("%d\n", a);//需要main函数才能打印，main函数是程序的入口
//}


////编写一个函数实现n的k次方,递归实现
//double my_pow(int n, int k)
//{
//	if (k > 0)
//	{
//		return n * my_pow(n, k - 1);
//	}
//	else if (k == 0)
//	{
//		return 1;
//	}
//	else
//	{
//		return 1.0 / my_pow(n, -k);
//	}
//}
//
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d %d", &n, &k);
//	double r = my_pow(n, k);
//	printf("%lf\n", r);
//	return 0;
//}

////写一个函数DigitSum(n),输入一个非负整数，返回返回组成它的数字之和
//int DigitSum(unsigned int n)
//{
//	if (n > 9)
//	{
//		return n % 10 + DigitSum(n / 10);
//	}
//	else
//	{
//		return n;
//	}
//}
//
//int main()
//{
//	unsigned int num = 0;
//	scanf("%d", &num);
//	int c = DigitSum(num);
//	printf("%d\n", c);
//	return 0;
//}


//编写一个函数 reverse_string(char* string)（递归实现）
//实现：将参数字符串中的字符反向排列，不是逆序打印。
//要求：不能使用C函数库中的字符串操作函数。
//比如 :
//char arr[] = "abcdef";
//逆序之后数组的内容变成：fedcba

//指针参数的方法
//#include <stdio.h>
//﻿
//int my_strlen(char* str)
//{
//	if ('\0' == *str)
//		return 0;
//	else
//	{
//		return 1 + my_strlen(str + 1);
//	}
//}
//
//void reverse_string(char* str, char* end)
//{
//	if (str < end)
//	{
//		char* tmp = *str;
//		*str = *end;
//		*end = tmp;	
//		reverse_string(str + 1, end - 1);
//	}
//}
//
//int main()
//{
//	char arr[100] = { 0 };
//	scanf("%s", arr);
//	int sz = my_strlen(arr);
//	char* end = arr + sz - 1;
//	reverse_string(arr, end);
//	printf("%s\n", arr);
//	return 0;
//}

//数组参数的方法
//size_t my_strlen(char *arr)
//{
//	int count = 0;
//	while (1)
//	{
//		if (*arr != '\0')
//		{
//			count++;
//			arr++;
//		}
//		else
//			return count;
//	}
//}

//size_t my_strlen(char* arr)
//{
//	if ('\0' == *arr)
//		return 0;
//	else
//		return 1 + my_strlen(arr + 1);
//}

//size_t my_strlen(char arr[])
//{
//	if ('\0' == arr[0])
//		return 0;
//	else
//		return 1 + my_strlen(arr + 1);
//}

////#include <string.h>
//void reverse_string(char arr[100])
//{
//	size_t sl = my_strlen(arr);
//	char tmp = arr[0];
//	arr[0] = arr[sl - 1];
//	arr[sl - 1] = '\0';
//	if (my_strlen(arr + 1) >= 2)
//	{
//		reverse_string(arr + 1);
//	}
//	arr[sl - 1] = tmp;
//}
//
//int main()
//{
//	char arr[100] = { 0 };
//	scanf("%s", arr);
//	reverse_string(arr);
//	printf("%s\n", arr);
//	return 0;
//}

////猜数字游戏(1 ~ 100)
//#include <stdio.h>
//#include <time.h>
//#include <stdlib.h>
//
//void menu()
//{
//	printf("******************\n");
//	printf("******1.play *****\n");
//	printf("******0.exit *****\n");
//	printf("******************\n");
//}
//
//void game()
//{
//	int ret = rand() % 100 + 1;
//	int input = 0;
//	while (input != ret)
//	{
//		scanf("%d", &input);
//		if (input < ret)
//		{
//			printf("猜小了\n");
//		}
//		else if (input > ret)
//		{
//			printf("猜大了\n");
//		}
//		else
//		{
//			printf("猜对了\n");
//		}
//	}
//}
//
// //多次游玩，需要循环
// //有选项，需要选择语句
//int main()
//{
//	srand((unsigned int)time(NULL));
//	int input = 0;
//	do
//	{
//		menu();
//		printf("请输入>:");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			game();
//		case 0:
//			break;
//		default:
//			printf("输入错误，请重新输入\n");
//		}
//	} while (input);
//	return 0;
//}


//编写代码在一个整形有序数组中查找具体的某个数
//要求：找到了就打印数字所在的下标，找不到则输出：找不到。
//#include <stdio.h>
//
// //顺序查找
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int n = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (scanf("%d", &n) == 1)
//	{
//		int flaot = 0;
//		int i = 0;
//		for (i = 0; i < sz; i++)
//		{
//			if (arr[i] == n)
//			{
//				flaot = 1;
//				printf("找到了，下标是%d", i);
//				break;
//			}
//		}
//		if (flaot == 0)
//		{
//			printf("找不到\n");
//		}
//	}
//
//	return 0;
//}

////二分查找
//void Find(int arr[], int key, int sz)
//{
//	int mid = 0;
//	int left = 0;
//	int right = sz - 1;
//	while(left <= right)
//	{
//		mid = (left + right) / 2;
//		if (arr[mid] > key)
//			right = mid - 1;
//		else if (arr[mid] < key)
//			left = mid + 1;
//		else
//		{
//			printf("找到了,下标是%d\n", mid);
//			break;
//		}
//	}
//	if (left > right)
//	{
//		printf("没找到\n");
//	}
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int key = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (scanf("%d", &key) == 1)
//	{
//		Find(arr, key, sz);
//
//	}
//	return 0;
//}




//int DisitSum(unsigned int n)
//{
//	if (n > 9)
//	{
//		return DisitSum(n / 10) + n % 10;
//	}
//	else
//		return n;
//}
//
//int main()
//{
//	unsigned int n = 0;
//	scanf("%d", &n);
//	int ret = DisitSum(n);
//	printf("%d\n", ret);
//	return 0;
//}


















